return proper error codes. see: /usr/include/sysexits.h

better makefile

basically polishing everything, ready for a release.
